/**
 * utils.js - 通用工具函数库
 * 提供状态消息显示、索引名自动生成等辅助功能
 */

/**
 * 显示状态消息到指定DOM元素
 * @param {HTMLElement} el - 目标显示元素
 * @param {string} text - 要显示的文本内容
 * @param {string} type - 消息类型: 'success' | 'error' | 'info'
 */
function showMessage(el, text, type = 'info') {
    if (!el) return; // 容错处理
    el.textContent = text;
    el.className = 'status ' + (type === 'error' ? 'error' : 'success');
}

/**
 * 根据表名自动生成ES索引名称
 * 格式：表名_年份 (如: users_2025)
 * @param {string} tableName - 数据库表名
 * @returns {string} 生成的索引名称，表名为空时返回空字符串
 */
function autoFillIndexName(tableName) {
    if (!tableName) return '';
    const year = new Date().getFullYear();
    return `${tableName}_${year}`;
}

/**
 * 防抖函数：延迟执行，适用于搜索输入等场景
 * @param {Function} func - 要执行的函数
 * @param {number} wait - 延迟毫秒数
 * @returns {Function} 防抖后的函数
 */
function debounce(func, wait = 300) {
    let timeout;
    return function executedFunction(...args) {
        const later = () => {
            clearTimeout(timeout);
            func(...args);
        };
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
    };
}

/**
 * 格式化日期时间
 * @param {Date|string} date - 日期对象或日期字符串
 * @param {string} format - 格式化模板，默认 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的日期字符串
 */
function formatDateTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
    const d = new Date(date);
    if (isNaN(d.getTime())) return '';

    const year = d.getFullYear();
    const month = String(d.getMonth() + 1).padStart(2, '0');
    const day = String(d.getDate()).padStart(2, '0');
    const hours = String(d.getHours()).padStart(2, '0');
    const minutes = String(d.getMinutes()).padStart(2, '0');
    const seconds = String(d.getSeconds()).padStart(2, '0');

    return format
        .replace('YYYY', year)
        .replace('MM', month)
        .replace('DD', day)
        .replace('HH', hours)
        .replace('mm', minutes)
        .replace('ss', seconds);
}